// 公共配置
/**
    1. 设定入口文件为main.js
    2. 设定输出文件为bundle.js
    3. 存放路径在dist
    4. 处理Vue文件：module中使用vue-loader，plugins中调用vue-loader/lib/plugin的实例，在html-webpack-plugin中设定title与模板地址
    5. 处理js文件：module中使用babel-loader，配置babel的编译依赖使用@babel/preset-env
    6. 处理less文件：使用style-loader与css-loader
    7. 处理png文件：使用file-loader
    8. 在plugins中先后调用vue-loader/lib/plugin、html-webpack-plugin的实例化对象，除此之外还可以使用DefinePlugin设定BASE_URL
 */
const path = require('path');
const VueLoaderP = require('vue-loader/lib/plugin');
const HtmlWebpackP = require('html-webpack-plugin');
const webpack = require('webpack');

module.exports = {
    mode: 'development',
    entry: './src/main.js',
    output: {
        path: path.join(__dirname, 'dist'),
        filename: 'bundle.js',
        publicPath: ''
    },
    module: {
        rules: [
            {
                test: /\.vue$/,
                loader: 'vue-loader'
            },
            {
                test: /\.js$/,
                use: {
                    loader: 'eslint-loader'
                }
            },
            {
                test: /\.css$/,
                exclude: '/node_modules',
                use: [
                    {
                        loader: 'style-loader'
                    },
                    {
                        loader: 'css-loader'
                    }
                ]
            },
            {
                test: /\.less$/,
                use: [
                    {
                        loader: 'style-loader',
                    },
                    {
                        loader: 'css-loader',
                    },
                    {
                        loader: 'less-loader',
                        options: {
                            lessOptions: {
                                strictMath: true,
                            },
                        },
                    },
                ],
            },
            {
                test: /\.js$/,
                use: {
                    loader: 'babel-loader',
                    options: {
                        presets: ['@babel/preset-env']
                    }
                }
            },
            {
                test: /\.(png|jpe?g|gif)$/,
                use: {
                    loader: 'file-loader',
                    options: {
                        outputPath: 'img',
                        name: '[name].[ext]',
                        esModule: false
                    }
                }
            }
        ]
    },
    plugins: [
        new webpack.DefinePlugin({
            // 值要求的是一个代码片段
            BASE_URL: JSON.stringify('')
        }),
        new VueLoaderP(),
        new HtmlWebpackP({
            title: 'VUE APP BASE',
            template: './public/index.html'
        }),
    ]
}